#!/usr/bin/env python3
import psutil
import time
import subprocess

def test_program_performance(command):
    # 获取当前进程信息
    process = psutil.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    # 获取当前进程的PID
    pid = process.pid
    p = psutil.Process(pid)

    # 记录开始时间
    start_time = time.time()

    # 创建一个记录内存使用情况和CPU使用率的列表
    memory_usage = []
    cpu_usage = []

    # 程序运行时监控内存和CPU
    while p.is_running():
        mem_info = p.memory_info()
        cpu_percent = p.cpu_percent(interval=1)  # 获取CPU使用百分比

        memory_usage.append(mem_info.rss)  # 使用rss（常驻内存集）
        cpu_usage.append(cpu_percent)

        time.sleep(0.5)  # 每隔0.5秒记录一次

    # 记录结束时间
    end_time = time.time()

    # 计算程序的总运行时间
    total_time = end_time - start_time

    # 获取最终内存和CPU使用情况
    final_mem = p.memory_info().rss
    final_cpu = p.cpu_percent()

    # 输出性能测试结果
    print(f"程序运行时间: {total_time:.2f} 秒")
    print(f"最终内存使用情况: {final_mem / (1024 ** 2):.2f} MB")
    print(f"最终CPU使用率: {final_cpu:.2f}%")

    # 打印内存使用情况变化
    print("\n内存使用情况（单位: Bytes）:")
    for idx, mem in enumerate(memory_usage):
        print(f"第 {idx+1} 秒: {mem / 1024:.2f} KB")

    # 打印CPU使用情况变化
    print("\nCPU使用率变化（单位: %）:")
    for idx, cpu in enumerate(cpu_usage):
        print(f"第 {idx+1} 秒: {cpu:.2f}%")

# 示例：运行一个简单的终端程序
if __name__ == "__main__":
    command = ["echo", "helloworld"]  # 这里可以替换为你要测试的程序
    test_program_performance(command)

